package com.nowcoder.community.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解：定义需要登录才能能访问的方法
 * 在方法前标注自定义注解：拦截所有的请求，只处理带有该注解的方法
 *
 *
 * @Target 注解
 * 功能：指明了修饰的这个注解的使用范围，即被描述的注解可以用在哪里。
 * ElementType的取值包含以下几种：
 *  TYPE:类，接口或者枚举
 *  FIELD:域，包含枚举常量
 *  METHOD:方法
 *  PARAMETER:参数
 *  CONSTRUCTOR:构造方法
 *  LOCAL_VARIABLE:局部变量
 *  ANNOTATION_TYPE:注解类型
 *  PACKAGE:包
 *
 *  @Retention 注解
 * 功能：指明修饰的注解的生存周期，即会保留到哪个阶段。
 * RetentionPolicy的取值包含以下三种：
 * SOURCE：源码级别保留，编译后即丢弃。
 * CLASS:编译级别保留，编译后的class文件中存在，在jvm运行时丢弃，这是默认值。
 * RUNTIME： 运行级别保留，编译后的class文件中存在，在jvm运行时保留，可以被反射调用。
 */

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}
